package Abstract;
/**关键在于：抽象父类不能创建对象实例化*/
public class TestAbstract {
    public static void main(String[] args) {
            //1.通过多态对象测试
        Father f= new Son();
        //【抽象父类】自己调用自己的【普通方法】和【抽象方法】
        f.eat();
        f.play();
        //因为父类抽象方法被重写，所有沿用子类重写后的功能实现
        f.say();//我继承了父类，并重写了父类的抽象方法！
        //2.判断父类能不能创建对象实例化?  报错，不能创建父类对象实例化
       // Father f2 = new Father();//抽象父类不可以实例化（创建对象）
        Son s =new Son();//子类可以创建对象
        }
}
abstract  class Father{//创建父类，并声明为抽象类
    public void eat(){
        System.out.println("吃什么呢");
    }
    public void play(){
        System.out.println("外面真好玩");
       }//当父类声明抽象方法时，子类必须做出选择
    public abstract  void say();//一个父类的抽象方法：被abstract修饰的方法叫抽象方法

}
//创建子类并继承
//abstract class Son extends Father{  //方法一
class Son extends Father{

    @Override //方法二：子类重写父类【所有的抽象方法】
    public void say() {
        System.out.println("我继承了父类，并重写了父类的抽象方法！");
    }
}